#ifndef __MOTOR_H
#define __MOTOR_H

#include "bsp_timer.h"
#include "low_level.h"

#define MOTOR_PHASE_RS (float)(0.65f)   // 相电阻 (欧姆)
#define MOTOR_PHASE_LD (float)(0.001f)  // 相电感 (H)
#define MOTOR_POLE_PAIRS (6U)           // 极对数
#define MOTOR_BEMF_VRPM (float)(11.45f) // 反电动势常数
#define MOTOR_I_RATED (float)(8.0f)     // 额定电流(母线)


typedef struct _iph_abc
{
    float iu;
    float iv;
    float iw;
}iph_abc_t;

typedef struct _motor
{
    uint8_t sample_type;      // 采样类型
    iph_abc_t iphase;         // 三相电流值

    uint16_t iphase_cali_times; // 相电流校准次数
    iph_abc_t iphase_offset;  // 三相偏移量
    uint8_t is_iphase_cali; // 相电流偏移量校准完成
    float cali_sum;


    uint8_t enable_pwm_out;

    uint32_t timer; // 配置定时器
}motor_t;

extern float phase_current_from_adcval(uint16_t adc_val); // adc转相电流
extern uint8_t motor_phase_current_calibration(motor_t* motor, uint16_t adc_val); // 电机相电流校准
extern void motor_apply_pwm_timings(motor_t* motor, uint16_t timings[3]); // 更新pwm占空比


#endif
